/**********************************************************************
* Filename: Participante.java
* Created: 2012/04/30
* @author Fernando Brito e Abreu
**********************************************************************/
package org.bunny.businessLayer;

import java.util.Set;
import java.util.HashSet;

public abstract class Participante{
	
	/**********************************************************************
	* @return set with all instances of the current class
	**********************************************************************/
	public static Set<Participante> allInstances(){
		Set<Participante> result = new HashSet<Participante>();
		result.addAll(Jogador.allInstances);
		result.addAll(Treinador.allInstances);
		return result;
	}
	
	private CalendarDate data_nascimento;
	private String nome;
	private Pais nacionalidade;
	
	/**********************************************************************
	* Default constructor
	**********************************************************************/
	public Participante(){
	}
	
	/**********************************************************************
	* Parameterized constructor
	* @param data_nascimento the data_nascimento to initialize
	* @param nome the nome to initialize
	* @param nacionalidade the nacionalidade to initialize
	**********************************************************************/
	public Participante(CalendarDate data_nascimento, String nome, Pais nacionalidade){
		this.data_nascimento = data_nascimento;
		this.nome = nome;
		this.nacionalidade = nacionalidade;
	}
	
	/**********************************************************************
	* Standard attribute getter
	* @return the data_nascimento of the participante
	**********************************************************************/
	public CalendarDate data_nascimento(){
		return data_nascimento;
	}
	
	/**********************************************************************
	* Standard attribute setter
	* @param data_nascimento the data_nascimento to set
	**********************************************************************/
	public void setData_nascimento(CalendarDate data_nascimento){
		this.data_nascimento = data_nascimento;
	}
	
	/**********************************************************************
	* Standard attribute getter
	* @return the nome of the participante
	**********************************************************************/
	public String nome(){
		return nome;
	}
	
	/**********************************************************************
	* Standard attribute setter
	* @param nome the nome to set
	**********************************************************************/
	public void setNome(String nome){
		this.nome = nome;
	}
	
	/**********************************************************************
	* ONE2MANY getter for Participante[*] <-> Pais[1]
	* @return the nacionalidade of the participante
	**********************************************************************/
	public Pais nacionalidade(){
		return nacionalidade;
	}
	
	/**********************************************************************
	* ONE2MANY setter for Participante[*] <-> Pais[1]
	* @param nacionalidade the nacionalidade to set
	**********************************************************************/
	public void setNacionalidade(Pais nacionalidade){
		this.nacionalidade = nacionalidade;
	}
	
//	/**********************************************************************
//	* User-defined operation specified in SOIL/OCL
//	* @param nome the nome to set
//	* @param data_nasce the data_nasce to set
//	* @param nacionalidade the nacionalidade to set
//	**********************************************************************/
//	public void inicializa(String nome, String data_nasce, Pais nacionalidade){
//		//	TODO
//		//	self.nome := nome;
//		//	 dummy := new CalendarDate;
//		//	 self.data_nascimento := dummy.stringToDate(data_nasce);
//		//	 destroy dummy;
//		//	 insert (nacionalidade,self) into Pais_Participante;
//	}
	
	//	PRE-CONDITIONS (TODO)
	/*
	pre ParticipanteArgumentosDefinidos
		((nome.isDefined and data_nasce.isDefined) and nacionalidade.isDefined)
	
	*/
	
	//	POST-CONDITIONS (TODO)
	/*
	post ParticipanteInicializado
		(self.nome.isDefined and self.data_nascimento.isDefined)
	
	*/
	
	/* (non-Javadoc)
	* @see java.lang.Object#toString()
	*/
	@Override
	/**********************************************************************
	* Object serializer
	**********************************************************************/
	public abstract String toString();
	
}
